package br.uniceub.fsw.agenda.model.facade;

import br.uniceub.fsw.agenda.exception.BusinessException;
import br.uniceub.fsw.agenda.exception.DatabaseException;
import br.uniceub.fsw.agenda.model.dao.MenuDAO;
import br.uniceub.fsw.agenda.model.vo.MenuVO;
import br.uniceub.fsw.agenda.util.StringUtils;
import java.util.List;

/**
 *
 * @author Bruno
 */
public class ManterMenuFacade extends GenericFacade {

    /**
     * Busca todas os Menus
     * @return List com objetos Menu
     * @throws br.uniceub.fsw.agenda.exception.DatabaseException
     * @throws br.uniceub.fsw.agenda.exception.BusinessException
     */
    public List<MenuVO> findAllMenu() throws DatabaseException, BusinessException {
        try {
            MenuDAO dao = new MenuDAO(getConnection());
            return dao.findAll();
        } finally {
            closeConnection();
        }
    }

    /**
     * Busca todos os Menus ou se o parâmetro estiver preenchido
     * busca por parte do nome
     * @return List com objetos Menu
     * @throws br.uniceub.fsw.agenda.exception.DatabaseException
     * @throws br.uniceub.fsw.agenda.exception.BusinessException
     */
    public List<MenuVO> findAllMenu(String noMenu) throws DatabaseException, BusinessException {
        try {
            MenuDAO dao = new MenuDAO(getConnection());
            
            if(StringUtils.isNullOrEmpty(noMenu)) {
                return dao.findAll();
            } else {
                return dao.findAllByNome(noMenu);
            }
        } finally {
            closeConnection();
        }
    }

    /**
     * Busca a Menu pela sigla
     * @param idMenu sigla da Menu
     * @return objeto Menu
     * @throws br.uniceub.fsw.agenda.exception.DatabaseException
     * @throws br.uniceub.fsw.agenda.exception.BusinessException
     */
    public MenuVO findMenuById(Integer idMenu) throws DatabaseException, BusinessException {
        try {
            MenuDAO dao = new MenuDAO(getConnection());
            return dao.findById(idMenu);
        } finally {
            closeConnection();
        }
    }
    
    /**
     * Busca todas as Menus por parte do nome
     * @param noUf nome do menu
     * @return List com objetos Menu
     * @throws br.uniceub.fsw.agenda.exception.DatabaseException
     * @throws br.uniceub.fsw.agenda.exception.BusinessException
     */
    public List<MenuVO> findAllMenuByNome(String noUf) throws DatabaseException, BusinessException {
        try {
            MenuDAO dao = new MenuDAO(getConnection());
            return dao.findAllByNome(noUf);
        } finally {
            closeConnection();
        }
    }
    
    /**
     * Insere um novo menu.
     * @param menu
     * @return ID auto-increment gerada pra esse registro
     * @throws br.uniceub.fsw.agenda.exception.BusinessException 
     * @throws br.uniceub.fsw.agenda.exception.DatabaseException
     */
    public Integer inserirMenu(MenuVO menu) throws BusinessException, DatabaseException {
        try {
            MenuDAO dao = new MenuDAO(getConnection());

            String noMenu = menu.getNoMenu();
            String dsChamada = menu.getDsChamada();
            
            //tratamento de erros
            if(StringUtils.isNullOrEmpty(noMenu))
            {
                throw new BusinessException("Nome do Menu é obrigatório.");
            }
            if(dsChamada.compareTo("") == 0)
            {
                throw new BusinessException("Chamada do Menu é obrigatória.");
            }
        
            return dao.insert(menu);
        } finally {
            closeConnection();
        }        
    }
    
    /**
     * Atualiza um menu.
     * @param menu
     * @throws br.uniceub.fsw.agenda.exception.BusinessException 
     * @throws br.uniceub.fsw.agenda.exception.DatabaseException
     */
    public void alterarMenu(MenuVO menu) throws BusinessException, DatabaseException {
        try {
            MenuDAO dao = new MenuDAO(getConnection());

            String noMenu = menu.getNoMenu();
            String dsChamada = menu.getDsChamada();
            
            //tratamento de erros
            if(StringUtils.isNullOrEmpty(noMenu))
            {
                throw new BusinessException("Nome do Menu é obrigatório.");
            }
            if(dsChamada.compareTo("") == 0)
            {
                throw new BusinessException("Chamada do Menu é obrigatória.");
            }
        
            dao.update(menu);            
        } finally {
            closeConnection();
        }        
    }
    
    /**
     * Exclui um menu.
     * @param menu
     * @throws br.uniceub.fsw.agenda.exception.BusinessException 
     * @throws br.uniceub.fsw.agenda.exception.DatabaseException
     */
    public void excluirMenu(MenuVO menu) throws BusinessException, DatabaseException {
        try {
            MenuDAO dao = new MenuDAO(getConnection());
            dao.delete(menu);
        } finally {
            closeConnection();
        }        
    }
    
}
